package com.briup.ch08;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
//TreeSet在插入的时候看你是否有Comparable接口
//并且有自己的compareTo算法
//附属在左边，正数在右边，==0已存在
//this-o正序 o-this 倒序
public class Test6_TreeSet {
    public static void main(String[] args) {
        Set<Integer> trees=new TreeSet<>();
        //不能存储重复数据，插入好数据按照compare算法
        //自然增长
        trees.add(10);
        trees.add(20);
        trees.add(50);
        trees.add(40);
        trees.add(30);
        trees.add(30);
        trees.add(40);
        System.out.println(trees);
        Set<String> trees2=new TreeSet<>();
        //不能有重复的数据，按照ascii码比较
        trees2.add("abc");
        trees2.add("hello2");
        trees2.add("hello1");
        trees2.add("hello3");
        trees2.add("world");
        System.out.println(trees2);
        Set<Student> trees3=new TreeSet<>();
        //自然排序
        Student s1=new Student("h张三",18,200);
        Student s2=new Student("a李四",20,400);
        Student s3=new Student("d王五",18,200);
        Student s4=new Student("h张三",6,200);
        trees3.add(s1);
        trees3.add(s2);
        trees3.add(s3);
        trees3.add(s4);
        System.out.println(trees3);
        //比较器排序 new TreeSet 参数：匿名内部类/lamda表达式  优先级高
        //多态：CompARATOR COMPRE(oBJECT O1,Object o2)
        //算法1只允许插入一个值
        Comparator<Student> com1=new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return 0;
            }
        };
        Set<Student> trees4=new TreeSet<>(com1);
        trees4.add(s1);
        trees4.add(s2);
        System.out.println(trees4);
        //算法2：所有的都能插入
        Set<Student> trees5=new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return 100;
            }
        });
        trees5.add(s1);
        trees5.add(s2);
        trees5.add(s3);
        System.out.println(trees5);
        //算法3：姓名升序
        Set<Student> trees6=new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });
        trees6.add(s1);
        trees6.add(s2);
        trees6.add(s3);
        System.out.println(trees6);
        //算法4：年龄降序
        Set<Student> trees7=new TreeSet<>((o1,o2)->{
            return o2.getAge()-o1.getAge();
        });
        trees7.add(s1);
        trees7.add(s2);
        trees7.add(s3);
        System.out.println(trees7);
        //算法5：姓名升序，年龄降序
        Set<Student> set8=new TreeSet<>((stu1,stu2)->{
            int result=stu1.getName().compareTo(stu2.getName());
            if(result==0)
            {
                result=stu2.getAge()-stu1.getAge();
            }
            return result;
        });
        set8.add(s1);
        set8.add(s2);
        set8.add(s3);
        System.out.println(set8);
        //String TreeSet
        //自然排序/默认排序 ASCII增长
        Set<String> set9=new TreeSet<>();
        set9.add("hello");
        set9.add("abc");
        set9.add("world");
        set9.add("boy");
        System.out.println(set9);
        //降序
        //比较器排序/自定义排序
        Set<String> set10=new TreeSet<>((str1,str2)->{
            if(str2.equals("hello")) return 100;
            return str2.compareTo(str1);
        });
        set10.add("hello");
        set10.add("abc");
        set10.add("world");
        set10.add("boy");
        System.out.println(set10);
    }
}
